[アップデート] Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされました

[アップデート] Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされました

Clock Icon2024.09.08

こんにちは、中川です。

Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/09/amazon-ecs-graviton-based-spot-compute-fargate/

Fargate Spot は通常の Fargate(オンデマンド)と比較して、最大 70% 割引価格で利用できる購入オプションです。
これまでは、Fargate Spot で x86 ベースの CPU アーキテクチャのみサポートされていました。
今回のアップデートにより、AWS Graviton ベースのコンピューティングでも Fargate Spot が利用可能になり、ARM アーキテクチャを利用したアプリケーションでも大幅な割引オプションを利用できるようになりました。

料金

ARM ベースの通常 Fargate、x86 ベースの Fargate Spot と東京リージョンで料金を比較した表が以下になります。

CPU キャパシティプロバイダ 時間あたりの vCPU 料金 時間あたりのメモリ料金
ARM Fargate $0.04045 $0.00442
ARM Fargate Spot $0.0122023 $0.00133335
x86 Fargate Spot $0.01525211 $0.0016682

ARM ベースの通常 Fargate と比較して、ARM ベースの Fargate Spot を使うと約 70% 安く利用できます。
また、x86 ベースの Fargate Spot と比較すると約 20% 安く利用できます。

参考:AWS Fargate Pricing

試してみた

ARM ベースの Fargate Spot を起動確認してみます。
ネットワークや IAM ロールは作成済みの前提とします。

クラスターを作成し、キャパシティープロバイダー戦略で Fargate Spot だけを使用するように設定します。

$ aws ecs create-cluster --cluster-name demo-cluster
$ aws ecs put-cluster-capacity-providers \
    --cluster demo-cluster \
    --capacity-providers FARGATE FARGATE_SPOT \
    --default-capacity-provider-strategy capacityProvider=FARGATE_SPOT,base=1

ARM64 を指定したタスク定義のファイルを作成します。コマンドでは CPU アーキテクチャを出力するようにしています。

task.json
{
    "family": "demo-task",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "FARGATE"
    ],
    "cpu": "256",
    "memory": "512",
    "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
    "containerDefinitions": [
        {
            "name": "demo-container",
            "image": "public.ecr.aws/docker/library/alpine:latest",
            "essential": true,
            "command": [
                "sh",
                "-c",
                "uname -m | tee /dev/termination-log"
            ],
            "logConfiguration": {
                "logDriver": "awslogs",
                "options": {
                    "awslogs-group": "/ecs/fargate-task",
                    "awslogs-region": "ap-northeast-1",
                    "awslogs-stream-prefix": "ecs"
                }
            }
        }
    ],
+   "runtimePlatform": {
+       "cpuArchitecture": "ARM64",
+       "operatingSystemFamily": "LINUX"
    }
}

タスク定義を登録して、タスクを実行します。

$ aws ecs register-task-definition --cli-input-json file://task.json

$ aws ecs run-task \
    --cluster demo-cluster \
    --network-configuration "awsvpcConfiguration={subnets=[\"subnet-xxxx\"],securityGroups=[\"sg-xxxx\"],assignPublicIp=ENABLED}" \
    --task-definition demo-task

コンソールから Fargate Spot で起動できていることを確認できました。

また、ログを確認すると ARM で実行されていることも確認できました。

さいごに

Fargate Spot で AWS Graviton ベースのコンピューティングがサポートされ、ARM アーキテクチャを利用したアプリケーションでも Fargate Spot を使えるようになりました。
ARM ベースの通常の Fargate に比べて約 70% 安く、また x86 ベースの Fargate Spot と比較しても 20% 安く利用できます。
これまで Fargate Spot を使いたくて x86 にしていたり、マルチアーキテクチャを使用していたことがありました。
コスト最適化のためにも ARM ベースの Fargate Spot を使えないか検討してはいかがでしょうか。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.